package com.yonyougov.devops.cruxcisupport.app;

import com.yonyougov.devops.cruxcisupport.app.dto.AppPageLikeDto;
import com.yonyougov.devops.cruxcisupport.app.dto.LinkAppDto;
import com.yonyougov.devops.cruxcisupport.app.vo.LinkAppVo;
import com.yonyougov.devops.cruxcisupport.app.vo.NoLinkAppByRoleIdDto;
import com.yonyougov.devops.cruxcisupport.app.vo.NoLinkAppVo;
import com.yonyougov.devops.fwc.core.entity.Pagination;
import com.yonyougov.devops.fwc.core.service.BaseService;

import java.math.BigInteger;
import java.util.List;

/**
 * t_app服务
 */
public interface AppService extends BaseService<AppEntity, BigInteger> {
    //<!--用户自定义代码开始-->

    /**
     * 根据角色查未关联的应用
     *
     * @param noLinkAppByRoleIdDto com.yonyougov.devops.cruxcisupport.app.vo.NoLinkAppByRoleIdDto
     * @return com.yonyougov.devops.cruxcisupport.app.vo.NoLinkAppVo
     */
    Pagination<NoLinkAppVo> findNoLinkAppPageByRoleId(NoLinkAppByRoleIdDto noLinkAppByRoleIdDto);

    /**
     * 级联删除:删除app的同时，删除role_app,t_version,t_version_info,t_app_env
     *
     * @param id appId
     */
    void deleteCascadeByPrimaryKey(BigInteger id);

    /**
     * 根据角色id和应用名称分页查询
     * @param appPageLikeDto [com.yonyougov.devops.cruxcisupport.app.dto.AppPageLikeDto] 参数
     * @return  appPagination<AppEntity> [com.yonyougov.devops.cruxcisupport.app.AppEntity]
     */
    Pagination<AppEntity> findPageByRoleIds(AppPageLikeDto appPageLikeDto) throws Exception;

    /**
     * 获取当前用户已关联的应用
     *
     * @param linkAppDto com.yonyougov.devops.cruxcisupport.app.dto.LinkAppDto
     * @return com.yonyougov.devops.cruxcisupport.app.vo.LinkAppVo
     */
    List<LinkAppVo> findAppByRoleIds(LinkAppDto linkAppDto) throws Exception;

    /**
     * 根据id查询
     *
     * @param ids
     * @return
     */
    List<AppEntity> findById(List<BigInteger> ids);

    boolean isSettledHealthcheck(BigInteger appId);


    /**
     * 获取应用的的服务端口
     * 约定: 名称为http的即为服务端口
     * @param appId 应用id
     * @return 应用的服务端口
     */
    Integer getServiceInnerPort(BigInteger appId) throws Exception;

    //<!--用户自定义代码结束-->
}
